import { is } from '@electron-toolkit/utils';
import { app } from 'electron';
import fs from 'fs';
import { mkdirp } from 'mkdirp';
import path from 'path';

export const Env = {
  isDev: is.dev,
  isProd: !is.dev,
  isTest: process.env.NODE_ENV === 'test',
  isWindows: process.platform === 'win32',
  isMac: process.platform === 'darwin',
  isLinux: process.platform === 'linux',
  isPackaged: app.isPackaged,
  app: {
    name: app.getName(),
    version: app.getVersion(),
    locale: app.getLocale()
  },
  paths: {
    // 应用程序根目录 - 应用的安装或开发目录
    // 开发环境: D:\git10\Joythink-AI
    // 生产环境: C:\Users\用户名\AppData\Local\Programs\joythink-ai\resources\app.asar
    root: app.getAppPath(),

    // 用户主目录 - 操作系统的用户主文件夹
    // Windows: C:\Users\用户名
    // macOS: /Users/用户名
    // Linux: /home/用户名
    home: app.getPath('home'),

    // 应用用户数据目录 - Electron应用专用的用户数据存储位置
    // Windows: C:\Users\用户名\AppData\Roaming\joythink-ai
    // macOS: ~/Library/Application Support/joythink-ai
    // Linux: ~/.config/joythink-ai
    userData: app.getPath('userData'),

    // 系统应用数据目录 - 操作系统的应用数据根目录
    // Windows: C:\Users\用户名\AppData\Roaming
    // macOS: ~/Library/Application Support
    // Linux: ~/.config
    appData: app.getPath('appData'),

    // 系统临时目录 - 操作系统的临时文件目录
    // Windows: C:\Users\用户名\AppData\Local\Temp
    // macOS: /var/folders/xx/...../T
    // Linux: /tmp
    temp: app.getPath('temp'),

    // 用户下载目录 - 用户的默认下载文件夹
    // Windows: C:\Users\用户名\Downloads
    // macOS: ~/Downloads
    // Linux: ~/Downloads
    downloads: app.getPath('downloads'),

    // 用户文档目录 - 用户的文档文件夹
    // Windows: C:\Users\用户名\Documents
    // macOS: ~/Documents
    // Linux: ~/Documents
    documents: app.getPath('documents'),

    // 用户桌面目录 - 用户的桌面文件夹
    // Windows: C:\Users\用户名\Desktop
    // macOS: ~/Desktop
    // Linux: ~/Desktop
    desktop: app.getPath('desktop'),

    // 应用安装目录 - 根据环境返回不同的安装路径
    // 开发环境: D:\git10\Joythink-AI (项目开发目录)
    // 生产环境: C:\Users\用户名\AppData\Local\Programs\joythink-ai (可执行文件所在目录)
    installDir: !is.dev && app.isPackaged ? path.dirname(app.getPath('exe')) : app.getAppPath(),

    // 应用工作区目录 - 应用数据和配置的主要存储位置
    // 开发环境: C:\Users\用户名\joythink-ai (用户主目录下的应用文件夹)
    // 生产环境: C:\Users\用户名\.joythink-ai (用户主目录下的隐藏应用文件夹)
    workspace: path.join(app.getPath('home'), is.dev ? app.getName() : '.' + app.getName())
  },
  // 判断当前是否在渲染进程中运行
  isRendererProcess(): boolean {
    return typeof process === 'undefined' || !process || process.type === 'renderer';
  },
  // 判断当前是否在主进程中运行
  isMainProcess(): boolean {
    return typeof process !== 'undefined' && process.type === 'browser';
  },
  // 判断当前是否为 Node 子进程
  isForkedChildProcess(): boolean {
    return Number(process.env.ELECTRON_RUN_AS_NODE) === 1;
  },
  // 获取资源路径
  getResourcePath(relativePath: string): string {
    return path.join(this.isDev ? process.cwd() : process.resourcesPath, relativePath);
  },
  // 获取安装目录
  async getInstallDir(): Promise<string> {
    const installDir = this.paths.installDir;
    if (!fs.existsSync(installDir)) {
      await mkdirp(installDir);
    }
    return installDir;
  },
  // 获取运行时目录(内部运行的目录，用于存储运行时数据)
  async getRuntimeDir(): Promise<string> {
    const workspacePath = await this.getWorkspacePath();
    const runtimeDir = path.join(workspacePath, '.runtime');
    if (!fs.existsSync(runtimeDir)) {
      await mkdirp(runtimeDir);
    }
    return runtimeDir;
  },
  // 获取工作目录，如果不存在则创建
  async getWorkspacePath(): Promise<string> {
    const workspacePath = this.paths.workspace;
    if (!fs.existsSync(workspacePath)) {
      await mkdirp(workspacePath);
    }
    return workspacePath;
  },
  // 获取数据目录
  async getWorkspaceDataPath(): Promise<string> {
    const workspacePath = await this.getWorkspacePath();
    const dataPath = path.join(workspacePath, 'data');
    if (!fs.existsSync(dataPath)) {
      await mkdirp(dataPath, { mode: 0o755 });
    }
    return dataPath;
  }
};
